﻿Imports DevExpress.XtraGrid.Views.Base
Imports DevExpress.XtraSplashScreen
Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Views.Grid

Public Class RowID
    Private State As Integer = 0 'trạng thái form 
    '0 mặc định
    '1 tạo mới
    '2 sửa
    '3 xóa
    Private Sub setReadonly(ByVal b As Boolean) 'set readonly để không cho thao tác khi ở trạng thái mặc định - cho thao tác khi ở tạo mới - sửa
        Me.MaTextEdit.Properties.ReadOnly = b
        Me.TenTextEdit.Properties.ReadOnly = b
        If b Then
            Me.GridView1.OptionsBehavior.Editable = False
        Else
            Me.GridView1.OptionsBehavior.Editable = True
        End If
        If b Then 'trong trạng thái readonly  thì không cho nhập và dòng trống thêm ở cuối
            Me.GridView1.OptionsView.NewItemRowPosition = DevExpress.XtraGrid.Views.Grid.NewItemRowPosition.None
        ElseIf b = False And State = 1 Then 'cho thêm dòng trống ở cuối
            Me.GridView1.OptionsView.NewItemRowPosition = DevExpress.XtraGrid.Views.Grid.NewItemRowPosition.Bottom
        End If
    End Sub
    'nút thoát
    Private Sub BarButtonItemThoat_ItemClick(sender As System.Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItemThoat.ItemClick
        Me.Dispose() 'chạy hàm này để giải phóng ram
        Me.Close() 'đóng form
    End Sub
    Private Sub setButtonTrangThaiSua(ByVal b As Boolean) 'set nút lưu và xóa - khi ở trạng thái sửa thì mới cho phép thao tác trên nó (enable = true) - các trạng thái khác thì không cho (enable = false)
        Me.BarButtonItemLuu.Enabled = b
        Me.BarButtonItemXoa.Enabled = b
        If b Then 'xử lý nút sửa (nếu nút lưu - xóa cho phép thì sửa ko cho phép và ngược lại)
            Me.BarButtonItemSua.Enabled = False
        Else
            Me.BarButtonItemSua.Enabled = True
        End If
    End Sub
    'nút tạo mới
    Private Sub BarButtonItemTaoMoi_ItemClick(sender As System.Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItemTaoMoi.ItemClick
        Try
            Me.setReadonly(False)
            Me.setButtonTrangThaiSua(True)
            Me.MaTextEdit.Focus() 'bắt con trỏ ở mã khi tạo mới
            'Me.DmtinhtrangBindingSource.AddNew() 'thêm một item mới trong bindingsource
            Me.State = 1 'trạng thái tạo mới
        Catch ex As Exception
            'khi có lỗi - ngoại lệ xảy ra
        End Try
    End Sub
    Private Sub GenerateGUID()
        Dim sGUID As String
        sGUID = System.Guid.NewGuid.ToString()
        MessageBox.Show(sGUID)
    End Sub
    Private Sub DM_TinhTrang_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        SplashScreenManager.ShowForm(GetType(WaitForm1))
        Me.DmtinhtrangTableAdapter.Fill(Me.PCV_FISHDataSet.dmtinhtrang)
        setReadonly(True)
        setButtonTrangThaiSua(False)
        Me.GridView1.BestFitColumns() 'tự co dãn các cột của igridview dựa vào độ dài cột dữ liệu
        GenerateGUID()
        SplashScreenManager.CloseForm()
    End Sub
    'nút Lưu
    Private Sub BarButtonItemLuu_ItemClick(sender As System.Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItemLuu.ItemClick
        Try
            'Me.GridView1.UpdateCurrentRow()
            Me.GridView1.CloseEditor()
            Me.DmtinhtrangBindingSource.EndEdit() 'end edit trước khi lưu - ghi những thay đổi 
            If Me.PCV_FISHDataSet.HasChanges Then 'coi có thay đổi dữ liệu hay ko ?
                If DevExpress.XtraEditors.XtraMessageBox.Show("Bạn có muốn 'Lưu' không ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Information) = Windows.Forms.DialogResult.Yes Then
                    Try
                        Me.DmtinhtrangTableAdapter.Update(Me.PCV_FISHDataSet.dmtinhtrang)
                        Me.State = 0 'trở về trạng thái mặc định 0
                        Me.setReadonly(True) 'set lại readonly
                        setButtonTrangThaiSua(False) 'set lại nút 
                    Catch ex As Exception
                        DevExpress.XtraEditors.XtraMessageBox.Show("Xảy ra lỗi :" & ex.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    End Try
                End If
            Else 'nếu ko thay đổi dữ liệu
                DevExpress.XtraEditors.XtraMessageBox.Show("Chưa có thay đổi dữ liệu ?", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.setReadonly(True) 'set lại readonly
                setButtonTrangThaiSua(False) 'set lại nút 
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message) 'tung message khi có ngoại lệ
        End Try
    End Sub
    Private Function getKiemTraMaTonTai(ByVal sMa As String) As Boolean 'kiểm tra sự tồn tại của mã - dùng kiểm tra chung với igridview
        If Me.DmtinhtrangBindingSource.Find("ma", sMa) = -1 Then 'nếu -1 nghĩa là ko tìm đc vị trí trong bindingsource
            Return False
        Else 'còn lại là tìm đc vị trí --> đã tồn tại
            Return True
        End If
    End Function
    'bắt lỗi mã
    Private Sub MaTextEdit_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles MaTextEdit.Validating
        If State = 1 Then 'xác định chỉ kiểm tra trong trường hợp tạo mới
            Try
                If Me.getKiemTraMaTonTai(Me.MaTextEdit.EditValue) Then 'kiểm tra mã tồn tại hay chưa ?
                    Me.MaTextEdit.ErrorText = "Mã này đã tồn tại"
                    e.Cancel = True
                End If
            Catch ex As Exception

            End Try
        End If
    End Sub
    'nút sửa
    Private Sub BarButtonItemSua_ItemClick(sender As System.Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItemSua.ItemClick
        Me.setReadonly(False)
        Me.setButtonTrangThaiSua(True)
    End Sub
    'nút first - vị trí đầu tiên
    Private Sub BarButtonItemFirst_ItemClick(sender As System.Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItemFirst.ItemClick
        Me.DmtinhtrangBindingSource.MoveFirst()
    End Sub
    'nút previous - vị trí trước 
    Private Sub BarButtonPrevious_ItemClick(sender As System.Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonPrevious.ItemClick
        Me.DmtinhtrangBindingSource.MovePrevious()
    End Sub
    'nút next - vị trí tiếp theo
    Private Sub BarButtonNext_ItemClick(sender As System.Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonNext.ItemClick
        Me.DmtinhtrangBindingSource.MoveNext()
    End Sub
    'nút last - vị trí cuối cùng
    Private Sub BarButtonLast_ItemClick(sender As System.Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonLast.ItemClick
        Me.DmtinhtrangBindingSource.MoveLast()
    End Sub
    'nút xóa 
    Private Sub BarButtonItemXoa_ItemClick(sender As System.Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItemXoa.ItemClick
        If DevExpress.XtraEditors.XtraMessageBox.Show("Bạn có muốn xóa '" & Me.MaTextEdit.EditValue & "' không ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Information) = Windows.Forms.DialogResult.Yes Then
            Try
                Me.DmtinhtrangBindingSource.RemoveCurrent()
                Me.DmtinhtrangTableAdapter.Update(Me.PCV_FISHDataSet.dmtinhtrang)
                Me.State = False
                Me.setReadonly(True)
                Me.setButtonTrangThaiSua(False)
            Catch ex As Exception

            End Try

        End If
    End Sub
    'hủy thay đổi 
    Private Sub BarButtonItemHuyThayDoi_ItemClick(sender As System.Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItemHuyThayDoi.ItemClick
        Me.DmtinhtrangBindingSource.EndEdit()
        If Me.PCV_FISHDataSet.HasChanges Then
            If DevExpress.XtraEditors.XtraMessageBox.Show("Bạn có muốn hủy tất cả những thay đổi đang làm không ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Information) = Windows.Forms.DialogResult.Yes Then
                Me.PCV_FISHDataSet.RejectChanges()
                Me.setReadonly(True)
                Me.setButtonTrangThaiSua(False)
            End If
        Else
            DevExpress.XtraEditors.XtraMessageBox.Show("Chưa có thay đổi dữ liệu ?", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Me.setReadonly(True)
            Me.setButtonTrangThaiSua(False)
        End If

    End Sub
    'nút in 
    Private Sub BarButtonItemIn_ItemClick(sender As System.Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItemIn.ItemClick
        'Dim report As XtraReportBacSi = New XtraReportBacSi
        'report.ShowRibbonPreview() 'hiển thị report theo kiểu ribbon
    End Sub

    'Private Sub GridView1_CellValueChanged(sender As Object, e As DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs)

    'End Sub

    'Private Sub GridView1_InvalidRowException(sender As Object, e As DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs)
    '    e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.NoAction
    'End Sub
    ''=========== xử lý bắt lỗi trên igridview - để nhập trực tiếp nhiều dòng =========================
    ''bật chức năng xem xét trong trạng thái sửa (modified)
    'Private Sub GridView1_ShownEditor(sender As Object, e As System.EventArgs)
    '    Dim view As ColumnView = CType(sender, ColumnView)
    '    view.ActiveEditor.IsModified = True
    'End Sub
    ''kiểm tra giá trị cột đang thao tác 
    'Private Sub GridView1_ValidatingEditor(sender As Object, e As DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs)
    '    If Me.GridView1.FocusedColumn.FieldName = "ma" And GridView1.FocusedRowHandle <> -999997 Then
    '        If IsDBNull(e.Value) Or IsNothing(e.Value) Then
    '            e.ErrorText = "Mã không được rỗng !"
    '            e.Valid = False
    '            Exit Sub
    '        ElseIf e.Value.ToString.Trim = "" Then
    '            e.ErrorText = "Mã không được rỗng !"
    '            e.Valid = False
    '            Exit Sub
    '        End If
    '        If Me.getKiemTraMaTonTai(e.Value) And State = 1 Then
    '            e.ErrorText = "Mã '" & e.Value & "'đã tồn tại !"
    '            e.Valid = False
    '        End If
    '    ElseIf Me.GridView1.FocusedColumn.FieldName = "ten" And GridView1.FocusedRowHandle <> -999997 Then
    '        If IsDBNull(e.Value) Or IsNothing(e.Value) Then
    '            e.ErrorText = "Tên không được rỗng !"
    '            e.Valid = False
    '        ElseIf e.Value.ToString.Trim = "" Then
    '            e.ErrorText = "Tên không được rỗng !"
    '            e.Valid = False
    '        End If
    '    End If
    'End Sub

    'Private Sub GridView1_CellValueChanged1(sender As Object, e As DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs) Handles GridView1.CellValueChanged
    '    'If Me.GridView1.IsLastRow Then
    '    '    Me.GridView1.UpdateCurrentRow()
    '    'End If
    'End Sub

    'Private Sub GridView1_CellValueChanging(sender As Object, e As DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs) Handles GridView1.CellValueChanging

    'End Sub

    'Private Sub GridView1_InitNewRow(sender As Object, e As DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs) Handles GridView1.InitNewRow

    'End Sub

    'Private Sub GridView1_InvalidRowException1(sender As Object, e As DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs) Handles GridView1.InvalidRowException
    '    e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.NoAction
    'End Sub

    'Private Sub GridControl1_ProcessGridKey(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles GridControl1.ProcessGridKey
    '    If True Then
    '        If e.KeyCode = Keys.Tab Then
    '            Dim grid As GridControl = TryCast(sender, GridControl)
    '            Dim view As GridView = TryCast(grid.FocusedView, GridView)
    '            If (e.Modifiers = Keys.None AndAlso view.IsNewItemRow(view.FocusedRowHandle) AndAlso view.FocusedColumn.VisibleIndex = view.VisibleColumns.Count - 1) Then
    '                If view.IsEditing Then
    '                    view.CloseEditor()
    '                End If
    '                SelectNextControl(grid, e.Modifiers = Keys.None, False, False, True)
    '                e.Handled = True
    '            End If
    '        End If
    '    End If

    'End Sub

    'Private Sub GridView1_ShownEditor1(sender As Object, e As System.EventArgs) Handles GridView1.ShownEditor
    '    Dim view As ColumnView = CType(sender, ColumnView)
    '    view.ActiveEditor.IsModified = True
    'End Sub


End Class